#include<iostream>
using namespace std;

//auto_ptr的思想：管理权转移 
namespace Mango
{
template<class T>
class auto_ptr
{
public:
    auto_ptr(T* p = nullptr) 
        :ptr(p)
    {}
    auto_ptr(auto_ptr<T>& p)
        :ptr(nullptr)
    {
        ptr = p.ptr;
        p.ptr = nullptr;
    }
    auto_ptr<T> operator=(auto_ptr<T>& p)
    {
        if(this != &p)
        {
            delete ptr;
            ptr = p.ptr;
            p.ptr = nullptr;
        }
        return *this;
    }
    T* operator->()
    {
        return ptr;
    }
    T& operator*()
    {
        return *ptr;
    }

    ~auto_ptr()
    {
        delete ptr;
        ptr = nullptr;
    }
private:
    T* ptr;
};
}